정규식을 사용한 숫자,영문,한글 입력 제한
· 약 6분
정규식을 사용하여 숫자만, 영문만, 영문과 숫자만 그리고 우리 위대한 한글만 입력할 수 있게 하였다. 테스트는 윈도우즈 크롬, 맥 크롬, 맥 사파리, 우분투 파폭에서 해보았고 모두 정상 작동 하는것을 확인하였다. 이벤트 keyCode를 받아 처리하는 코드도 보았지만 이 방법이 코딩도 적고 간단하여 구현해보 았다. 정규식 참 요긴하게 쓰인다. 날잡아서 정규식을 다시 한번 봐야겠다.
정규식
정규식을 사용하면 숫자만, 알파벳만, 숫자-알파벳 혹은 한글만을 입력할 수 있도록 제한 할 수 있다. 다음음 숫자만, 알파벳만, 숫자-알파벳만을 뽑아내는 정규식이다.
- 숫자만 :
/[0-9]/gi - 대소문자 상관없이 알파벳만:
/[a-z]/gi - 숫자와 알파벳만:
/[a-z0-9]/
위의 각각의 정규식에서 ^(not)을 붙이게 되면 숫자가 아닌 문자, 알파벳이 아닌 문자, 숫자와 알파벳이 아닌 문자들을 제거 할 수 있다.
- 숫자가 아닌 나머지 제거:
text.replace(/[^0-9]/gi) - 알파벳이 아닌 나머지 제거:
text.replace(/[^a-z]/gi) - 숫자와 알파벳이 아닌 문자 제거:
text.replace(/[^a-z0-9]/)
예제 코드
위의 정규식과 원하는 문자 유형을 제외한 나머지를 제거하는 코드를 사용한 예제는 아래와 같다. 아래의 코드를 실행하기 위해선 jQuery가 필요하다. 하지만 input 요소의 값을 읽기 위해 jQuery가 필요한 것이고 정규식을 활용한 원하지 않는 문자 제거 코드들은 jQuery가 없어도 동작한다.
<html>
<head>
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#input1").keyup(function(event){
if(event.keyCode !=8){
var result = "keycode="+ event.keyCode + " value="+ String.fromCharCode(event.keyCode);
var preHtml = $("#result").html();
$("#result").html(preHtml+ "<br />" +result);
}
if($(this).val() ==""){
$("#result").empty();
}
});
$("#onlyNumber").keyup(function(event){
if (!(event.keyCode >=37 && event.keyCode<=40)) {
var inputVal = $(this).val();
$(this).val(inputVal.replace(/[^0-9]/gi,''));
}
});
$("#onlyAlphabet").keyup(function(event){
if (!(event.keyCode >=37 && event.keyCode<=40)) {
var inputVal = $(this).val();
$(this).val(inputVal.replace(/[^a-z]/gi,''));
}
});
$("#notHangul").keyup(function(event){
if (!(event.keyCode >=37 && event.keyCode<=40)) {
var inputVal = $(this).val();
$(this).val(inputVal.replace(/[^a-z0-9]/gi,''));
}
});
$("#onlyHangul").keyup(function(event){
if (!(event.keyCode >=37 && event.keyCode<=40)) {
var inputVal = $(this).val();
$(this).val(inputVal.replace(/[a-z0-9]/gi,''));
}
});
});
</script>
</head>
<body>
숫자만: <input type="text" id="onlyNumber" /> <br />
영문만: <input type="text" id="onlyAlphabet" /> <br />
영문,숫자만:<input type="text" id="notHangul" /><br />
한글만:<input type="text" id="onlyHangul" /><br />
keyCode: <input type="text" id="input1" />
<div id="result">
</div>
</body>
</html>
